package com.ntd.study.coding.standards.hjly;

/**
 * @author liuwenju
 * @date 2021/3/24
 */
public class StudyCodingCodingConvention {

    /**
     * 编码规约
     * 1. 开发的时候需要根据 pdm 的表结构定义做程序的业务逻辑验证，需要能够提示出 “商家code重复” 等具体内容
     * 2. 对常规的增删改查的非空验证交给前段验证，但是必须要做业务验证
     * Maven 操作规约
     * 1. 每次修改二方库都需要即时提交到私服 mvn clean deploy
     * 国际化规范
     * Todo liuwenju 暂时不看 2021.3.27
     * 命名风格规范
     * 1. url 所有单词都是小写，每个单词使用 “-” 隔开
     * mybatis mapper 命名规范
     * 1. 语法关键字统一使用小写
     * 2. select 中的每个字段必须加 as
     * 3. from 后的表明必须加 as
     * 4. 在使用 inner join 或者 left join 的时候，on 后面关联条件需要增加括号 -) 并且左边主表字段放左边
     * 5. 结果集查询强制使用 resultMap，
     * |-- 1) resultMap定义规范 id名称是小驼峰，首字母小写，以 “Map”为后缀
     * |-- 2) 不加jdbcType ，column和property内容相同（同DO字段）
     * |-- 3) 查询字段要加as 别名，别名内容即DO字段
     * 6. 代码可能通用的部分或者篇幅很长的代码应该抽取成sql代码段。抽取原则以方便阅读体验为标准
     * |-- 1) sql 结果集超过4个字段必须使用 sql 抽取
     * 7. SQL代码中不能出现 ` 符号，如果表名和字段名只有加` 才不会报错，就应该改表结构了
     * 8. 如果查询一对多的关联表需要使用聚集元素collection标签，强制使用resultMap 而不是ofType
     * |-- 1) 聚集的子表resultMap 为了字段名不和父级resultMap重复，需要在column中加表名前缀，格式仍然为小驼峰。如表缩写前缀为ppl，column为pplPriceDataPlanId
     * 9. 控制台输出到视图层的 DTO 统一命名
     * |-- 1) xxWebInDTO
     * |-- 2) xxWebOutDTO
     * 10. Service 层与 Dependency 层不同服务工程不同的命名规约
     * |-- 1) Dal 层：xxxDalService
     * |-- 2) 服务工程 -) Service 层：xxxBizService，xxxAdapterService
     * |-- 3) 控制台工程 -) Service 层：xxxWebBizService
     * |-- 4) Dependency 层：xxxRemoteService，xxxProvider
     * 服务端命名方法规约
     * |-- 1) 查询单个实体前缀用 get
     * |-- 2) 查询多个实体前缀用 list
     * |-- 3) Dal 层（readDAO，readDalService）：listByQuery，ListPageByQuery，ListInfoPageByQuery，getByQuery，getInfoByQuery，getById，getBy***Id，getBy***，多个参数使用 And 隔开，4个及以上使用 Query
     * |-- 4) Query 中枚举类型参数定义：如果传入的是变量，不加 Enum 后缀，使用小驼峰命名，类型是枚举
     * |-- 5) writeDAO，writeDalService：save，update，updateByStatus（根据状态更新：锁状态），remove
     * |-- 6) transform*** A 实体转为 B 实体
     * |-- 7) build*** 封装一个实体对象
     * POJO 类
     * 1. 如果涉及到枚举，需要增加 @link 引用
     * 2. 常规 POJO 使用 @Data 注解即可
     * 3. POJO 中除了 DO 的 id 与数据库对应之外，Query，WebQuery，InDTO，OutDTO，info，InBO，OutBO，对象中的 id 都必须明确定义
     * 4. 如果DO中存在json字段，则DO中允许将对应的Json实体放入DO中，避免建立多余的Info去处理
     * 5. DTO中的transform方法，可通过BeanUtils.copyProperties方法进行copy
     * 6. LocalDateUtils已经提交hjly-common-tool项目，以后所有项目POJO类的时间 统一用LocalDateTime，对应数据库的datetime和timestamp类型，日期统一用LocalDate ,对应数据库的date类型
     * 7. 枚举属性规约定义
     * |-- 1) 可能重复的枚举需要加表名的部分防止重复
     * |-- 2) 数据库表中的固定取值范围和含义的字段强制定义对应的枚举。枚举类定义在pojo-local对应的领域下enum包
     * |-- 3) 项目中需要枚举描述的情况要添加name字段，(不要使用desc，命名统一为name)
     * |-- 4) sql中不允许任何硬编码，需要将枚举传入
     * |-- 5) Dal层 Service层不要使用Integer ***Type做方法参数，强制使用对应的枚举类型传值
     * |-- 6) 自己定义的枚举，非特殊type都是从1开始，0预留给特殊取值使用
     * 关于代表是否含义的字段POJO映射关系规约
     * 1. isxxxTag 字段，代表是否含义的字段
     * 2. 变量名不能以is开头，在BizService层transform做Integer到Boolean的转换使用BooleanEnum的valueOf方法
     *
     *
     * @param args
     */
    public static void main(String[] args) {

    }
}
